package com.example.blades.myhandler;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;

public class BarStart extends AppCompatActivity {
    private Button btn=null;
    private ProgressBar bar=null;

    /*使用匿名内部类来Override Handler 当中的handlerMessage方法*/
    Handler updateBarHandler=new Handler()
    {
        @Override
        public void handleMessage(Message msg) {
            bar.setProgress(msg.arg1);
            updateBarHandler.post(updateThread);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bar_start);

        btn=(Button)findViewById(R.id.btn);
        bar=(ProgressBar)findViewById(R.id.progressBar);
        btn.setOnClickListener(new BtnListener());
    }

    /*当点击btn start按钮时，就会执行BtnListener的OnClick方法*/
    class BtnListener implements View.OnClickListener
    {
        @Override
        public void onClick(View v)
        {
            bar.setVisibility(View.VISIBLE);
            updateBarHandler.post(updateThread);
        }
    }

    /*线程类，该类使用匿名内部类的方式进行声明*/
    Runnable updateThread=new Runnable() {
        int i=0;

        @Override
        public void run() {
            System.out.print("Progress Bar Start!");
            i=i+2;
            /*得到一个消息对象，Message类有Android操作系统提供*/
            Message msg=updateBarHandler.obtainMessage();

            /*将msg对象的参数arg1设为i，用arg1和arg2这两个成员变量传递消息，
            * 优点是系统性能消耗较少*/
            msg.arg1=i;
            try {
                /*设置当前显示睡眠1秒*/
                Thread.sleep(100);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }

            /*将msg对象加入到消息队列中*/
            updateBarHandler.sendMessage(msg);
            if(i==100)
            {
                /*当i为100时，就将线程对象从handler当中移除*/
                updateBarHandler.removeCallbacks(updateThread);
            }
        }
    };
}
